package com.dzl.order.dao;

import com.dzl.base.mapper.BaseMapper;
import com.dzl.order.pojo.WelfareOrder;
import com.dzl.order.pojo.dto.WelfareOrderBatchUpdateDto;
import com.dzl.order.pojo.query.WelfareOrderQuery;
import com.dzl.order.pojo.query.WelfareOrderUserQuery;
import com.dzl.order.pojo.vo.*;
import com.dzl.supplier.pojo.WelfareSupplier;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 订单表(WelfareOrder)表数据库访问层
 * @author caobucao
 * @since 2021-05-18 15:36:49
 */
public interface WelfareOrderMapper extends BaseMapper<WelfareOrder> {

    /**
     * 分页查询订单列表（大订单维度）
     * @author ChenLong
     * @date 2021-09-24 13:56:58
     * @param query 查询条件
     * @return java.util.List<com.dzl.order.pojo.vo.WelfareOrderParentVo>
     **/
    List<WelfareOrderParentVo> getOrderParentListPage(WelfareOrderQuery query);

    /**
     * 查询拆单子订单
     * @author ChenLong
     * @date 2021-09-22 17:11:54
     * @param query 订单查询条件
     * @return java.util.List<com.dzl.order.pojo.vo.WelfareOrderChildVo>
     **/
    List<WelfareOrderSupplierVo> getOrderChildList(WelfareOrderQuery query);

    /**
     * 获取各状态的订单数量
     * @date 2021/5/26 17:57
     * @author caobucao
     * @param query  查询条件
     * @return java.util.List<java.lang.Integer>
     */
    List<Integer> getOrderCount(WelfareOrderQuery query);

    /**
     * 获取订单供应商列表
     * @author ChenLong
     * @date 2021-09-24 15:04:29
     * @param query 供应商查询条件
     * @return java.util.List<com.dzl.supplier.pojo.WelfareSupplier>
     **/
    List<WelfareSupplier> getOrderSupplierList(WelfareOrderQuery query);

    /**
     * 获取用户订单及订单下商品列表
     * @author ChenLong
     * @date 2021-05-21 18:45:32
     * @param welfareOrderUserQuery 用户订单查询实例类
     * @return java.util.List
     **/
    List<WelfareOrderSupplierVo> getOrderGoodsListByUserId(WelfareOrderUserQuery welfareOrderUserQuery);

    /**
     * 获取订单商品表里面卡的积分分摊总额
     * @author ChenLong
     * @date 2021-05-26 15:16:28
     * @param orderId 订单id
     * @return java.util.List<com.dzl.order.pojo.vo.WelfareOrderGoodsCardShareVo>
     **/
    List<WelfareOrderGoodsCardShareVo> getOrderGoodsCardShareListByOrderId(@Param("orderId") Integer orderId);

    /**
     * 获取订单商品表里面卡的sku列表
     * @author ChenLong
     * @date 2021-05-26 20:55:41
     * @param orderId 订单id
     * @return java.util.List<com.dzl.order.pojo.vo.WelfareOrderGoodsSkuVo>
     **/
    List<WelfareOrderGoodsSkuVo> getOrderGoodsSkuListByOrderId(@Param("orderId") Integer orderId);

    /**
     * 订单超时取消
     * @author ChenLong
     * @date 2021-06-06 16:01:43
     * @return java.lang.Integer
     **/
    Integer updateOrderCancelExpiredTime();

    /**
     * 获取超时需要取消的订单列表
     * @author ChenLong
     * @date 2021-06-06 16:01:43
     * @return java.lang.Integer
     **/
    List<WelfareOrder> getOrderCancelExpiredTime();

    /**
     * 通过订单id获取订单详情
     * @date 2021/5/28 11:18
     * @author caobucao
     * @param orderId 订单id
     * @return com.dzl.order.pojo.vo.WelfareOrderVo
     */
    WelfareOrderDetailVo selectOrderDetailByOrderId(@Param("orderId") Integer orderId);

    /**
     * 订单T+7发货
     * @date 2021/7/5 9:32
     * @author caobucao
     * @return java.lang.Integer
     */
    Integer updateOrderDelivery();

    /**
     * 查询选中订单的指定状态的总条数
     * @date 2021/7/20 18:00
     * @author caobucao
     * @param orderNos 订单编号s
     * @param orderStatus 订单状态
     * @return java.lang.Integer
     */
    Integer selectCountByOrderIds(@Param("orderNos") List<String> orderNos, @Param("orderStatus") Integer orderStatus);

    /**
     * 获取选中的订单编号的订单总条数，以判断订单编号是否被改动
     * @date 2021/7/20 19:00
     * @author caobucao
     * @param orderNos 选中的多条订单编号
     * @return java.lang.Integer
     */
    Integer selectCountByOrderNos(@Param("orderNos") List<String> orderNos);

    /**
     * 批量修改订单信息，包括结算状态，回执单等
     * @param welfareOrderBatchUpdateDto 订单修改对象
     * @date 2021/10/13 18:00
     * @author liuguanjun
     */
    Integer batchUpdateOrderByIds(WelfareOrderBatchUpdateDto welfareOrderBatchUpdateDto);

}

